package com.lmy.springboot_quartz;

import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

/**
 * 配置监听器，在springboot容器启动时开启定时任务调度器
 * 此监听器的作用类似于使用原生Quartz框架时通过main()手动开启调度器(scheduler.start())
 * 集群状态下，每个jobDetail会分配给一个节点去执行
 */
@Component
public class StartApplicationListener implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private Scheduler scheduler;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
//        //设置触发器名称和分组
//        TriggerKey triggerKey = TriggerKey.triggerKey("trigger1", "group1");
//        //在调度器中通过triggerKey 取触发器。当此触发器不存在则新建，存在则直接获取
//        try {
//            Trigger trigger = scheduler.getTrigger(triggerKey);
//            //当指定触发器不存在，则新建触发器
//            if (trigger == null) {
//                trigger = TriggerBuilder.newTrigger()
//                        .withIdentity(triggerKey)   //传入triggerKey 指定触发器名称和分组
//                        .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))   //按cron表达式执行，每10s执行一次
//                        .startNow() //立刻启动
//                        .build();
//            }
//            //将指定Job对象封装成JobDetail
//            JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class)
//                    .withIdentity("job", "group1")  //配置任务名和分组
//                    .build();
//            scheduler.scheduleJob(jobDetail, trigger);
//            //启动调度器
//            scheduler.start();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }
}
